﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using skhukb.Models;
using skhukb.DB;
using skhukb.BL;

namespace skhukb.Controllers
{
    [Authorize]
    public class SearchController : Controller
    {
        [HttpGet]
        public ActionResult Main()
        {
            return View();
        }

        static char[] 분리문자 = new char[] { ' ', ',' };

        [skhukb.Util.AjaxOnly] [HttpGet]
        public ActionResult Do(SearchFormModel 모델)
        {
            if (모델.키워드 == null) return PartialView("_Alert", Consts.검색조건없음);
            string[] 키워드목록 = 모델.키워드.Split(분리문자);
            if (키워드목록.Length == 0) return PartialView("_Alert", Consts.검색조건없음);

            using (var db = new DBDataContext()) {
                IEnumerable<주제> 주제목록 = null;
                foreach (var 키워드 in 키워드목록) {
                    var temp = db.주제.Where(p => p.제거 == false &&
                                                   ((모델.검색대상_주제명 && p.제목.Contains(키워드)) ||
                                                    (모델.검색대상_글제목 && p.글.Any(q => q.상태 == Consts.최신버전 && q.제목.Contains(키워드))) ||
                                                    (모델.검색대상_글내용 && p.글.Any(q => q.상태 == Consts.최신버전 && q.내용.Contains(키워드))) ||
                                                    (모델.검색대상_작성자 && p.글.Any(q => q.상태 == Consts.최신버전 && q.사용자.이름.Contains(키워드)))));
                    if (주제목록 == null) 주제목록 = temp;
                    else 주제목록 = 주제목록.Intersect<주제>(temp);
                }
                var DATE = new DateTime(2000, 10, 10);
                var 결과목록 = 주제목록.Select(p => new 검색결과항목Model {
                    제목 = p.총제목, 
                    URL = LinkHekper.SubjectDetail(Url, p.ID),
                    수정일 = (p.글.Count(q => q.상태 == Consts.최신버전) > 0) ?
                                p.글.Where(q => q.상태 == Consts.최신버전).Max(q => q.생성일) :
                                p.주제편집.Count() > 0 ? p.주제편집.Max(q => q.편집일) : DATE
                });
                return PartialView("_SearchResult", new SearchResultModel { 목록 = 결과목록.ToList() });
            }
        }

        [HttpGet]
        public ActionResult New()
        {
            using (var db = new DBDataContext()) {
                var 주제목록 = db.주제.Where(p => p.글.Where(t => t.상태 == Consts.최신버전).Count() > 0)
                                      .OrderByDescending(p => p.글.Where(t => t.상태 == Consts.최신버전).Max(t => t.생성일))
                                      .Take(100);
                var 결과목록 = 주제목록.Select(p => new 검색결과항목Model {
                    제목 = p.총제목, 
                    URL = LinkHekper.SubjectDetail(Url, p.ID),
                    수정일 = p.글.Where(t => t.상태 == Consts.최신버전).Max(t => t.생성일)
                });
                return View(new SearchResultModel { 목록 = 결과목록.ToList() });
            }
        }

    }
}
